home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / proasm / routines / requester.r < prev    next >
Text File  |  1993-07-24  |  6KB  |  289 lines

  1.  
  2. ;---;  requester.r  ;----------------------------------------------------------
  3. *
  4. *    ****    FILE REQUESTER ASL/REQ    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        1.03
  8. *    Last Revision    24.07.93
  9. *    Identifier    frq_defined
  10. *    Prefix        frq_    (File requester)
  11. *                 ¯    ¯ ¯
  12. *    Functions    DoFileRequester
  13. *
  14. *    Flags        frq_ASLONLY    if set only a ASL Requester opened
  15. *
  16. ;------------------------------------------------------------------------------
  17.  
  18. ;------------------
  19.     ifnd    frq_defined
  20. frq_defined    =1
  21.  
  22. ;------------------
  23. frq_oldbase    equ __base
  24.     base    frq_base
  25. frq_base:
  26.  
  27. ;------------------
  28.  
  29. ;------------------------------------------------------------------------------
  30. *
  31. * DoFileRequester    Open a file requester and get a file.
  32. *
  33. * INPUT:    a0    Title for requester.
  34. *        a1    Pattern.
  35. *        a2    Destination for file path (162 bytes, incl. zero).
  36. *
  37. * RESULT:    d0    Pointer to filename or 0 if cancel or error. (CCR)
  38. *
  39. ;------------------------------------------------------------------------------
  40.  
  41. ;------------------
  42. DoFileRequester:
  43.  
  44. ;------------------
  45. ; Start.
  46. ;
  47. \start:
  48.     movem.l    d1-a6,-(a7)
  49.     move.l    4.w,a6
  50.     move.l    a0,d6
  51.     move.l    a1,d5
  52.     move.l    a2,a4
  53.     moveq    #0,d4            ;failure
  54.  
  55.     IFND    frq_ASLONLY
  56.     cmp.w    #36,20(a6)        ;lib version
  57.     bcs    \req
  58.     ENDC
  59.  
  60. ;--------------------------------------------------------------------
  61. ; Use asl.library.
  62. ;
  63. \asl:
  64.     lea    frq_aslname(pc),a1
  65.     jsr    -408(a6)
  66.     move.l    d0,d7
  67.     
  68.     IFND    frq_ASLONLY
  69.     beq    \req
  70.     ELSE
  71.     beq    \exit
  72.     ENDC
  73.  
  74.     move.l    d7,a6
  75.     moveq    #0,d0            ;0 = ASL_FileRequest
  76.     lea    frq_asltags(pc),a0
  77.     move.l    d6,4(a0)        ;title
  78.     move.l    d5,12(a0)        ;pattern
  79.     jsr    -48(a6)            ;AllocAslRequest()
  80.     tst.l    d0
  81.     beq    \closelib
  82.  
  83.     move.l    d0,-(a7)        ;AReqBase
  84.     move.l    d0,a0
  85.     lea    frq_tagdone(pc),a1
  86.     jsr    -60(a6)            ;AslRequest
  87.     tst.l    d0            ;Cancel?
  88.     beq.s    \freeasl
  89.  
  90.     move.l    (a7),a0
  91.     move.l    4(a0),a1        ;rf_File, filename
  92.     move.l    8(a0),a0        ;rf_Dir,  directory
  93.  
  94. ;------------------
  95. ; Copy asl strings together.
  96. ;
  97. \copyasl:
  98.     move.l    a4,a2
  99.     move.w    #162,d1
  100.  
  101.     tst.b    (a0)            ;this is done to prevent file names
  102.     beq.s    \loop2            ;like '/ass3.q' etc.
  103.  
  104. \loop:    tst.b    (a0)
  105.     beq.s    1$
  106.     move.b    (a0)+,(a2)+
  107.     subq.w    #1,d1
  108.     bhi.s    \loop
  109.     bra.s    \freeasl
  110.  
  111. 1$:    cmp.b    #":",-1(a2)
  112.     beq.s    \loop2
  113.     cmp.b    #"/",-1(a2)
  114.     beq.s    \loop2
  115.     move.b    #"/",(a2)+
  116.     subq.b    #1,d1
  117.     beq.s    \freeasl
  118.  
  119. \loop2:    subq.b    #1,d1            ;copy filename
  120.     beq.s    \freeasl
  121.     move.b    (a1)+,(a2)+
  122.     bne.s    \loop2
  123.     move.l    a4,d4            ;=>all okay!
  124.  
  125. ;------------------
  126. ; Free asl request.
  127. ;
  128. \freeasl:
  129.     move.l    (a7)+,a0
  130.     jsr    -54(a6)            ;_LVOFreeAslRequest()
  131.  
  132. ;------------------
  133. ; Close any library.
  134. ;
  135. \closelib:
  136.     move.l    d7,a1
  137.     move.l    4.w,a6
  138.     jsr    -414(a6)        ;closelib
  139.  
  140. ;------------------
  141. ; Exit.
  142. ;
  143. \exit:
  144.     move.l    d4,d0
  145.     movem.l    (a7)+,d1-a6
  146.     rts
  147.  
  148. ;--------------------------------------------------------------------
  149. ; Use req.library.
  150. ;
  151.     IFND    frq_ASLONLY
  152. \req:
  153.     lea    frq_reqname(pc),a1
  154.     jsr    -408(a6)
  155.     move.l    d0,d7
  156.     beq.s    \exit
  157.  
  158.     move.l    d7,a6
  159.     lea    frq_reqstruct(pc),a0
  160.     move.l    d6,2(a0)        ;title
  161.     move.l    a4,14(a0)
  162.  
  163. \copypattern:
  164.     move.l    d5,a1
  165.     moveq    #-3,d0            ;for two brackets.
  166. \coloop:
  167.     addq.b    #1,d0
  168.     tst.b    (a1)+
  169.     bne.s    \coloop
  170.  
  171.     move.l    d5,a1
  172.     lea    frq_reqshow(pc),a2
  173.     addq.l    #1,a1
  174.     moveq    #31,d1
  175.     cmp.l    d0,d1
  176.     bge.s    \copynow
  177.     move.l    d1,d0
  178.  
  179. \copynow:
  180.     move.b    (a1)+,(a2)+
  181.     subq.b    #1,d0
  182.     bne.s    \copynow
  183.  
  184.     jsr    -84(a6)            ;FileRequester()
  185.     tst.l    d0
  186.     beq.s    \freereq
  187.     move.l    a4,d4
  188.  
  189. \freereq:
  190.     lea    frq_reqstruct(pc),a0
  191.     jsr    -114(a6)        ;PurgeFiles()
  192.     bra    \closelib
  193.     ENDC
  194.  
  195. ;------------------
  196.  
  197. ;--------------------------------------------------------------------
  198.  
  199. ;------------------
  200. ; Tags for ASL filerequester.
  201. ;
  202. frq_asltags:
  203.  
  204. \ASL_Dummy    equ    $80000000+$80000
  205. \ASL_Hail    equ    \ASL_Dummy+1
  206. \ASL_LeftEdge    equ    \ASL_Dummy+3
  207. \ASL_TopEdge    equ    \ASL_Dummy+4
  208. \ASL_Width    equ    \ASL_Dummy+5
  209. \ASL_Height    equ    \ASL_Dummy+6
  210. \ASL_File    equ    \ASL_Dummy+8
  211. \ASL_Dir    equ    \ASL_Dummy+9
  212. \ASL_Pattern    equ    \ASL_Dummy+10
  213. \ASL_FuncFlags    equ    \ASL_Dummy+20
  214.  
  215.         dc.l    \ASL_Hail,0    
  216.         dc.l    \ASL_Pattern,0    
  217.         dc.l    \ASL_TopEdge,11
  218.         dc.l    \ASL_LeftEdge,0
  219.         dc.l    \ASL_Height,175
  220.         dc.l    \ASL_FuncFlags,1
  221.  
  222.  
  223. frq_tagdone:
  224.  
  225. \tag_done    equ    0
  226.  
  227.         dc.l    \tag_done
  228.  
  229.  
  230. ;------------------
  231. ; Struct for REQ requester.
  232. ;
  233. frq_reqstruct:
  234.     dc.w    0        ;version
  235.     dc.l    0;title        ;title
  236.     dc.l    0        ;directory text
  237.     dc.l    0        ;file name
  238.     dc.l    0;pathname    ;full name and path
  239.     dc.l    0        ;window
  240.     dc.w    0,0,0,0        ;stuff...
  241.     dc.l    $1094        ;FLAGS
  242.     dc.w    3,0,3,0,0    ;colors for dir/file/device,fontname/size
  243.     ds.w    8,0        ;colors...
  244.     ds.b    36,0        ;INTERNAL
  245.     dc.l    0,0,0        ;date stamp
  246.     dc.w    0,0        ;window size
  247.     dc.w    0,0        ;font...
  248.     dc.l    0        ;extended list
  249.     ds.b    32,0        ;wildcards for hide
  250. frq_reqshow:
  251.     ds.b    32,0        ;wildcards for show
  252.     ds.w    8,0        ;cursor stuff
  253.     ds.l    3,0        ;INTERNAL
  254.     ds.b    132,0        ;INTERNAL
  255.     ds.l    3,0        ;INTERNAL
  256.  
  257. ;0    ;Set this in Flags if you want .info files to show.  They default to hidden.
  258. ;1    ;Set this in Flags if you want extended select.  Default is not.
  259. ;2    ;Set this in Flags if you want directory caching.  Default is not.
  260. ;3    ;Set this in Flags if you want a font requester rather than a file requester.
  261. ;4    ;Set this in Flags if you want a hide-info files gadget.
  262. ;5    ;Set this in Flags if you DON'T want 'show' and 'hide' string gadgets.
  263. ;6    ;Use absolute x,y positions rather than centering on mouse.
  264. ;7    ;Purge the cache whenever the directory date stamp changes if this is set.
  265. ;8    ;Don't cache a directory unless it is completely read in when this is set.
  266. ;9    ;Set this in Flags if you DON'T want sorted directories.
  267. ;10    ;Set this in Flags if you DON'T want a drag bar and depth gadgets.
  268. ;11    ;Set this bit if you are selecting a file to save to.
  269. ;12    ;Set this bit if you are selecting a file(s) to load from.
  270. ;13    ;Allow the user to select a directory, rather than a file.
  271.  
  272. ;------------------
  273. frq_aslname:    dc.b    "asl.library",0
  274. frq_reqname:    dc.b    "req.library",0
  275.      even
  276.  
  277. ;------------------
  278.  
  279. ;--------------------------------------------------------------------
  280.  
  281. ;------------------
  282.     base    frq_oldbase
  283.  
  284. ;------------------
  285.     endif
  286.  
  287.     end
  288.  
  289.